package practice.Day30;

/**
 * @Author quan
 * @Description 最难的问题
 * @Date 2023/6/25 20:37
 */

/**
 * 要求：将数据解密
 * 消息加密的办法是：对消息原文中的每个字母，分别用该字母之后的第5个字母替换
 * （例如：消息原文中的每个字母A 都分别替换成字母F），其他字符不 变，并且消息原文的所有字母都是大写的。
 * 密码中的字母与原文中的字母对应关系如下。
 * 密码字母：A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 * 原文字母：V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
 */

import java.util.Scanner;

/**
 * 输入：包括多组数据，每组数据一行，为收到的密文。 密文仅有空格和大写字母组成。HELLO WORLD<br/>SNHJ
 * 输出：对应每一组数据，输出解密后的明文。CZGGJ RJMGY<br/>NICE
 */
public class Num1_HardQues {
    public static void main(String[] args) {
        //遍历字符串:如果是大写字母就进行变换，否则说明是空格直接拼接；
        //由于题目中说了只有大写字母和空格，所以问题1可以忽略
        //问题1：怎么判断是大写字母？ASCII:大写字母的范围是65-94 int a = Integer.valueOf(char)
        //问题2：如果是大写字母，就进行转化：
        //（1）如果要解密的密码字母在A-E之间，则其对应的原文值=密码字母+21;
        //（2）否则：原文值=密码字母-5;
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()){
            //1、获取输入的字符串
            String str = sc.nextLine();
            //2、定义一个字符串容器，用来拼接解密后的字符
            StringBuilder sb = new StringBuilder();
            //2、遍历字符串，获取字符：判断字符的所属类型
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                //如果是空格，直接拼接
                if(c == ' '){
                    sb.append(" ");
                }else{
                    //说明是大写字母
                    //判断大写字母的类型：是大于E的情:注意这里-5或者+21之后要转为char类型
                    if(c > 'E'){
                        sb.append((char)(c-5));
                    }else{
                        //是A-E的情况
                        sb.append((char)(c+21));
                    }
                }
            }
            System.out.println(sb);
        }
    }
}
